package dt.day03.demo;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * 程序启动类
 * 第一步：有100个人,请先给这100个人进行编号;编号的格式为：P+日期+编号(P20210719001)
 * 第二步：将这100人存到集合中，然后给这100人随机给一个消费金额;消费金额在 [2000,4000]之间
 * 第三步：将消费金额按照从大到小进行排序后；计算最高金额的编号，计算最低金额的编号
 * 第四步：先打印最高金额和最低金额;然后按照从高到低进行打印；打印格式； 序号-编号-消费金额
 */
public class Main {

    public static List<Person> personList = new LinkedList<>();

    private static Person maxPerson = null;

    private static Person minPerson = null;


    public static void main(String[] args) {
        insertPerson(100);
        updatePersonAmount();
        sort();
        println();
    }


    /**
     * 新增人员
     */
    public static void insertPerson(int num) {
        for (int i = 1; i <= num; i++) {
            //生成编号
            String pno = NoUtil.getNo("P", i);
            Person person = new Person(pno, 0);
            personList.add(person);
        }
        System.out.println("============新增" + personList.size() + "【人】完毕============");
    }


    /**
     * 更新人员金额
     */
    public static void updatePersonAmount() {
        for (int i = 0; i < personList.size(); i++) {
            Person person = personList.get(i);
            int amount = RandomUtil.randomInt(2000, 4001);
            person.setAmount(amount);
        }
        System.out.println("============更新" + personList.size() + "【人】金额完毕============");
    }


    /**
     * 按照金额大小进行排序
     */
    public static void sort() {
        PersonComparator personComparator = new PersonComparator();
        //集合从高到低进行排序
        Collections.sort(personList, personComparator);
        //获取最大的值
        maxPerson = personList.get(0);
        //获取最小的值
        minPerson = personList.get(personList.size() - 1);
        System.out.println("============从高到低进行排序完毕============");
    }

    /**
     * 结果打印
     */
    public static void println() {


        String maxStr = String.format("编号【%s】金额最高,金额为【%s】", maxPerson.getPno(), maxPerson.getAmount());

        String minStr = String.format("编号【%s】金额最低,金额为【%s】", minPerson.getPno(), minPerson.getAmount());

        String headStr = String.format("序号\t编号\t消费金额");

        System.out.println(maxStr);
        System.out.println(minStr);
        System.out.println(headStr);

        for (int i = 0; i < personList.size(); i++) {
            Person person = personList.get(i);
            String dataStr = String.format("%s\t%s\t%s", i + 1, person.getPno(), person.getAmount());
            System.out.println(dataStr);
        }

    }


}
